Preparation:
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
drivers <- read.csv("archive/drivers.csv", na.strings = "\\N")
results <- read.csv("archive/results.csv", na.strings = "\\N")
constructors <- read.csv("archive/constructors.csv", na.strings = "\\N")
races <- read.csv("archive/races.csv", na.strings = "\\N")
#install.packages("plotly")
# drivername, wins, year, nationality, constructor
df <- results |>
left_join(drivers, by = "driverId") |>
left_join(races, by = "raceId") |>
left_join(constructors, by = "constructorId") |>
mutate(name = paste(forename, surname, sep = " ")) |>
filter(year >= 2000 & year <= 2020) |>
group_by(name, year) |>
mutate(wins = sum(position == 1, na.rm = T)) |>
ungroup() |>
select("name", "year", "wins", "nationality.x", "url.x", "name.y") |>
distinct(name, year, .keep_all = T) |>
group_by(name) |>
mutate(totalwins = sum(wins, na.rm = T)) |>
ungroup() |>
mutate(order = dense_rank(desc(totalwins))) |>
rename(nationality = nationality.x, url = url.x, constructor = name.y) |>
arrange(order) |>
filter(order <= 9, wins > 0)
rm(list = setdiff(ls(), "df"))
Plotting:
library(plotly)
##
## Attache Paket: 'plotly'
## Das folgende Objekt ist maskiert 'package:ggplot2':
##
## last_plot
## Das folgende Objekt ist maskiert 'package:stats':
##
## filter
## Das folgende Objekt ist maskiert 'package:graphics':
##
## layout
# table(df$constructor)
# Brawn Ferrari Honda Lotus F1 McLaren Mercedes Red Bull Renault Toro Rosso
colors <- c(
"Brawn" = "#7B1113",
"Ferrari" = "#DC0000",
"Honda" = "#666666",
"Lotus F1" = "#0E55A5",
"McLaren" = "#FF8700",
"Mercedes" = "#00D2BE",
"Red Bull" = "#1E41FF",
"Renault" = "#FFF500",
"Toro Rosso" = "#469BFF"
)
hover_text <- with(df, paste(name, ": ", wins, " Wins, Constructor: ", constructor))
fig <-
plot_ly(df, x = ~wins, y = ~name, type = "bar", color = ~constructor,
colors = colors, text = hover_text) |>
layout(title = "Most successfull drivers with constructors",
xaxis = list(title = "Races won"),
yaxis = list(title = "", categoryorder = "total ascending",
categoryarray = ~order),
barmode = 'stack')
fig